﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using AdminCondominio.Dominio;
using System.Data;

namespace AdminCondominio.Persistencia
{
    public class UsuarioDAO
    {
        //private String _CadenaConexion = @"Data Source=localhost;Initial Catalog=BdCondominio;Persist Security Info=True;User ID=admin;Password=12345";
        private String _CadenaConexion = @"Data Source=localhost;Initial Catalog=BdCondominio;Persist Security Info=True;User ID=sa;Password=";
        private SqlConnection _Conexion;
        public UsuarioDAO() {
            _Conexion = new SqlConnection(_CadenaConexion);
        }
        public Usuario crear(Usuario usuarioACrear) 
        {
            
                _Conexion.Open();
                String _Sentencia = @"INSERT INTO usuario VALUES(@NoUsuario,@NoTiUsuario,@NoCorreo,@TxClave)";
                using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                {
                    SqlParameter parameternousuario = new SqlParameter("@NoUsuario", SqlDbType.NVarChar);
                    parameternousuario.Value = usuarioACrear.NoUsuario;
                    SqlParameter parameternotiusuario = new SqlParameter("@NoTiUsuario", SqlDbType.NVarChar);
                    parameternotiusuario.Value = usuarioACrear.NoTipoUsuario;
                    SqlParameter parameternocorreo = new SqlParameter("@NoCorreo", SqlDbType.NVarChar);
                    parameternocorreo.Value = usuarioACrear.NoCorreo;
                    SqlParameter parametertxclave = new SqlParameter("@TxClave", SqlDbType.NVarChar);
                    parametertxclave.Value = usuarioACrear.TxClave;


                    _Comando.Parameters.Add(parameternousuario);
                    _Comando.Parameters.Add(parameternotiusuario);
                    _Comando.Parameters.Add(parameternocorreo);
                    _Comando.Parameters.Add(parametertxclave);

                    _Comando.ExecuteNonQuery();
                }
                _Conexion.Close();
                Usuario usuarioCreado = this.obtener(usuarioACrear.NoCorreo);
                return usuarioCreado;
           
        }

        public Usuario obtener(String nocorreo) {
            _Conexion.Open();
            String _Sentencia = @"select *from usuario where NoCorreo=@nocorreo";
            Usuario usuarioObtenido = null;
            using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
            {
                SqlParameter parameternocorreo = new SqlParameter("@nocorreo", SqlDbType.NVarChar);
                parameternocorreo.Value = nocorreo;

                _Comando.Parameters.Add(parameternocorreo);
                SqlDataReader resultado = _Comando.ExecuteReader();
                if (resultado.HasRows)
                {
                    resultado.Read();

                    usuarioObtenido = new Usuario();
                    usuarioObtenido.NoUsuario = (String)resultado["NoUsuario"];
                    usuarioObtenido.NoTipoUsuario = (String)resultado["NoTiUsuario"];
                    usuarioObtenido.NoCorreo = (String)resultado["NoCorreo"];
                    usuarioObtenido.TxClave = (String)resultado["TxClave"];
                }
            }
            _Conexion.Close();

            return usuarioObtenido;
                      
          }
        public Usuario obtenerXCodigo(int cousuario)
        {
            _Conexion.Open();
            String _Sentencia = @"select *from usuario where CoUsuario=@cousuario";
            Usuario usuarioObtenido = null;
            using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
            {
                SqlParameter parametercousuario = new SqlParameter("@cousuario", SqlDbType.Int);
                parametercousuario.Value = cousuario;

                _Comando.Parameters.Add(parametercousuario);
                SqlDataReader resultado = _Comando.ExecuteReader();
                if (resultado.HasRows)
                {
                    resultado.Read();

                    usuarioObtenido = new Usuario();
                    usuarioObtenido.CoUsuario = (int)resultado["CoUsuario"];
                    usuarioObtenido.NoUsuario = (String)resultado["NoUsuario"];
                    usuarioObtenido.NoTipoUsuario = (String)resultado["NoTiUsuario"];
                    usuarioObtenido.NoCorreo = (String)resultado["NoCorreo"];
                    usuarioObtenido.TxClave = (String)resultado["TxClave"];
                }
            }
            _Conexion.Close();

            return usuarioObtenido;

        }
        public Usuario modificar(Usuario usuarioModificar) 
        {
            
                 _Conexion.Open();
                 String _Sentencia = @"update usuario set NoUsuario=@nousuario,TxClave=@txclave where NoCorreo=@nocorreo";
                 using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
                 {
                    
                     SqlParameter parameternousuario = new SqlParameter("@nousuario", SqlDbType.NVarChar);
                     parameternousuario.Value = usuarioModificar.NoUsuario;
                     SqlParameter parametertxclave = new SqlParameter("@txclave", SqlDbType.NVarChar);
                     parametertxclave.Value = usuarioModificar.TxClave;
                     SqlParameter parameternocorreo = new SqlParameter("@nocorreo", SqlDbType.NVarChar);
                     parameternocorreo.Value = usuarioModificar.NoCorreo;


                 
                     _Comando.Parameters.Add(parameternousuario);
                     _Comando.Parameters.Add(parametertxclave);
                     _Comando.Parameters.Add(parameternocorreo);

                     _Comando.ExecuteNonQuery();

                 }
                 _Conexion.Close();

                 Usuario usuarioDev = this.obtener(usuarioModificar.NoCorreo);
                 return usuarioDev;
             

        
        }
        public void eliminar(Usuario usuarioEliminar) 
        {
            _Conexion.Open();
            String _Sentencia = @"delete from usuario where NoCorreo=@nocorreo";
            using (SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion))
            {
                SqlParameter parameternocorreo = new SqlParameter("@nocorreo", SqlDbType.NVarChar);
                parameternocorreo.Value = usuarioEliminar.NoCorreo;
                _Comando.Parameters.Add(parameternocorreo);
                _Comando.ExecuteNonQuery();
            }
            _Conexion.Close();
        }

        public List<Usuario> ListarUsuario(String noUsuario)
        {
            _Conexion.Open();
            String _Sentencia = @"select * from usuario where NoUsuario like '%"+noUsuario+"%'";
          
            SqlCommand _Comando = new SqlCommand(_Sentencia, _Conexion);
            SqlDataReader resultado = _Comando.ExecuteReader();
            List<Usuario> _LisUsuario = new List<Usuario>();

            while (resultado.Read())
            {
                Usuario _Item = new Usuario();
                _Item.CoUsuario = resultado.IsDBNull(0) ? 0 : resultado.GetInt32(0);
                _Item.NoUsuario = resultado.IsDBNull(1) ? string.Empty : resultado.GetString(1);
                _Item.NoTipoUsuario = resultado.IsDBNull(2) ? string.Empty : resultado.GetString(2);
                _Item.NoCorreo = resultado.IsDBNull(3) ? string.Empty : resultado.GetString(3);
                _Item.TxClave = resultado.IsDBNull(4) ? string.Empty : resultado.GetString(4);
                _LisUsuario.Add(_Item);
            }
            _Conexion.Close();

            return _LisUsuario;


        }
        public Usuario ObtenerUsuarioConCorreoRepetido(String nousuario, String correo)
        {
            String sentencia = "SELECT * FROM usuario WHERE NoCorreo=@correo AND NoUsuario<>@nousuario";
            _Conexion.Open();
            Usuario usuario = null;
            using (SqlCommand comando = new SqlCommand(sentencia, _Conexion))
            {
                SqlParameter parametercorreo = new SqlParameter("@correo", SqlDbType.NVarChar);
                parametercorreo.Value = correo;
                SqlParameter parameternousuario = new SqlParameter("@nousuario", SqlDbType.NVarChar);
                parameternousuario.Value = nousuario;
                comando.Parameters.Add(parametercorreo);
                comando.Parameters.Add(parameternousuario);
                SqlDataReader resultado = comando.ExecuteReader();
                if (resultado.HasRows)
                {
                   
                    resultado.Read();

                    usuario = new Usuario();
                    usuario.NoUsuario = (String)resultado["NoUsuario"];
                    usuario.NoTipoUsuario = (String)resultado["NoTiUsuario"];
                    usuario.NoCorreo = (String)resultado["NoCorreo"];
                    usuario.TxClave = (String)resultado["TxClave"];


                }
            }
            _Conexion.Close();
            return usuario;
        }
        public Usuario login(Usuario usuarioLogin) 
        {
            String sentencia = "SELECT * FROM usuario WHERE NoCorreo=@correo AND TxClave=@clave";
            _Conexion.Open();
            Usuario usuario = null;
            using (SqlCommand comando = new SqlCommand(sentencia, _Conexion))
            {
                SqlParameter parametercorreo = new SqlParameter("@correo", SqlDbType.NVarChar);
                parametercorreo.Value = usuarioLogin.NoCorreo;
                SqlParameter parameterclave = new SqlParameter("@clave", SqlDbType.NVarChar);
                parameterclave.Value = usuarioLogin.TxClave;
                comando.Parameters.Add(parametercorreo);
                comando.Parameters.Add(parameterclave);
                SqlDataReader resultado = comando.ExecuteReader();
                if (resultado.HasRows)
                {

                    resultado.Read();

                    usuario = new Usuario();
                    usuario.NoUsuario = (String)resultado["NoUsuario"];
                    usuario.NoTipoUsuario = (String)resultado["NoTiUsuario"];
                    usuario.NoCorreo = (String)resultado["NoCorreo"];
                    usuario.TxClave = (String)resultado["TxClave"];


                }
            }
            _Conexion.Close();
            return usuario;
        }
    }
}